In a large pot, add the diced potatoes and cover them with the chicken broth. Bring the broth to a boil, then reduce the heat to low and let the potatoes simmer until they are tender. This should take about 15-20 minutes.
While the potatoes are cooking, melt the butter in a separate pot over medium heat. Add the diced onion and celery and sauté them until they are soft and translucent. This should take about 5-7 minutes.
Once the vegetables are cooked, sprinkle the flour over the sautéed onions and celery and stir to combine. Cook the mixture for about 1-2 minutes to make a roux. A roux is a thickening agent that will help to thicken the soup later.
Slowly add the chicken broth and stir to combine with the roux. Increase the heat to medium and bring the mixture to a boil. Reduce the heat to low and let the mixture simmer for 5-7 minutes until it thickens.
Add the cooked potatoes and the remaining chicken broth to the pot. Stir in the milk, heavy cream, salt, black pepper, thyme, and bay leaves. Mix well and let the soup simmer for another 10-15 minutes until the flavors are well combined.
Once the soup has simmered for the desired amount of time, remove the bay leaves and discard them. Using an immersion blender or a regular blender, puree the soup until it is smooth and creamy. If you're using a regular blender, be careful when blending hot liquids as they can splatter.